package com.ruoyi.hotel.service.impl;

import java.util.List;

import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.hotel.domain.HlPost;
import com.ruoyi.hotel.domain.HlState;
import com.ruoyi.hotel.domain.dto.HlAdminCommissionDTO;
import com.ruoyi.hotel.mapper.HlPostMapper;
import com.ruoyi.hotel.mapper.HlStateMapper;
import com.ruoyi.system.mapper.SysRoleMapper;
import com.ruoyi.system.mapper.SysUserMapper;
import com.ruoyi.system.mapper.SysUserRoleMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.hotel.mapper.HlAdminCommissionMapper;
import com.ruoyi.hotel.domain.HlAdminCommission;
import com.ruoyi.hotel.service.IHlAdminCommissionService;

import static com.ruoyi.common.enums.CommissionRatio.ORDINARY_RATIO;
import static com.ruoyi.common.enums.CommissionType.*;

/**
 * 员工提成Service业务层处理
 * 
 * @author ruoyi
 * @date 2022-12-10
 */
@Service
public class HlAdminCommissionServiceImpl implements IHlAdminCommissionService 
{
    /** 业务执行mapper */
    @Autowired
    private HlAdminCommissionMapper hlAdminCommissionMapper;

    /** 岗位底薪和折扣获取mapper */
    @Autowired
    private HlPostMapper hlPostMapper;

    /** 状态表获取状态值mapper */
    @Autowired
    private HlStateMapper hlStateMapper;

    /** 管理员信息获取管理员&权限表mapper */
    @Autowired
    private SysUserMapper sysUserMapper;

    /** 管理员&权限表获取权限表mapper */
    @Autowired
    private SysUserRoleMapper sysUserRoleMapper;

    /** 权限表获取权限值mapper */
    @Autowired
    private SysRoleMapper sysRoleMapper;



    /**
     * 查询员工提成
     * 
     * @param id 员工提成主键
     * @return 员工提成
     */
    @Override
    public HlAdminCommission selectHlAdminCommissionById(Long id)
    {

        return hlAdminCommissionMapper.selectHlAdminCommissionById(id);

    }

//    查询的那个实体类字段。用member的id查出来再set进去

    /**
     * 查询员工提成列表
     * 
     * @param hlAdminCommission 员工提成
     * @return 员工提成
     */
    @Override
    public List<HlAdminCommissionDTO> selectHlAdminCommissionList(HlAdminCommission hlAdminCommission)
    {
        List<HlAdminCommissionDTO> hlAdminCommissionDTOSList = hlAdminCommissionMapper.selectHlAdminCommissionList(hlAdminCommission);


//        拿到折扣的比例
//        HlMemberCommissionRatio hlMemberCommissionRatio = hlMemberCommissionRatioMapper.selectHlMemberCommissionRatioById(1L);
//        Double ratio = hlMemberCommissionRatio.getRatio();


//        循环修改List里的每一条数据

        for (HlAdminCommissionDTO hlAdminCommissionDTOS:hlAdminCommissionDTOSList) {
            //为办理用户的管理员名 是唯一的标识
            String updateByName = hlAdminCommissionDTOS.getUpdateBy();

            //当前用户的会员信息获取
            Integer memberId = hlAdminCommissionDTOS.getUser().getMemberId();
            //当前用户的会员办理费用获取
            Double memberPrice = hlAdminCommissionDTOS.getMember().getMemberPrice();

            //当前用户的身份证号信息获取
            String idCard = hlAdminCommissionDTOS.getUser().getIdCard();


//        普通权限判断如果不是
            if(!ORDINARY.equals(memberId)){
//                办理普通住房的员工提成
                hlAdminCommissionDTOS.setDiscount(ORDINARY_RATIO);
//        白银权限判断
                if(SILVER.equals(memberId)){
//                这里写普通到白银的提成逻辑
//                    调用服务接口方法获取当前会员的提成比例
                    Double postRatio = getPostRatio(updateByName);


                    hlAdminCommissionDTOS.setDiscount(ORDINARY_RATIO);
                }

//        黄金权限判断
                if(GOLD.equals(memberId)){

//                通过唯一标识如idcard来确认当前用户办理会员的次数


//                判断上次用户权限等级



//                    if()
//
//
//                        hlAdminCommissionDTOS.setDiscount(ORDINARY_RATIO);

                }


//        铂金权限判断
                if(PLATINUM.equals(memberId)){
                    hlAdminCommissionDTOS.setDiscount(ORDINARY_RATIO);
                }


//        钻石权限判断
                if(DIAMOND.equals(memberId)){
                    hlAdminCommissionDTOS.setDiscount(ORDINARY_RATIO);
                }

            }

//        普通权限

//            获取当前用户的会员提成信息
//            Double discount = hlAdminCommissionDTOS.getMember().getDiscount();

        }

        return hlAdminCommissionDTOSList;


    }

    /**
     * 新增员工提成
     * 
     * @param hlAdminCommission 员工提成
     * @return 结果
     */
    @Override
    public int insertHlAdminCommission(HlAdminCommission hlAdminCommission)
    {

//        ======= 设置创建时间和创建者的方法,在执行sql之前写到实体类中（修改者也可按照此逻辑） ======
//        参数类.setCreateTime(DateUtils.getNowDate());
//        ====== 这个getUsername()是利用权限security的工具类获取的，在BaseController中可以看到源码 ======
//        参数类.setUpdateBy(getUsername());
        hlAdminCommission.setCreateTime(DateUtils.getNowDate());
        return hlAdminCommissionMapper.insertHlAdminCommission(hlAdminCommission);
    }

    /**
     * 修改员工提成
     * 
     * @param hlAdminCommission 员工提成
     * @return 结果
     */
    @Override
    public int updateHlAdminCommission(HlAdminCommission hlAdminCommission)
    {
//        ======= 设置创建时间和创建者的方法,在执行sql之前写到实体类中（修改者也可按照此逻辑） ======
//        参数类.setCreateTime(DateUtils.getNowDate());
//        ====== 这个getUsername()是利用权限security的工具类获取的，在BaseController中可以看到源码 ======
//        参数类.setUpdateBy(getUsername());
        hlAdminCommission.setUpdateTime(DateUtils.getNowDate());
        return hlAdminCommissionMapper.updateHlAdminCommission(hlAdminCommission);
    }

    /**
     * 批量删除员工提成
     * 
     * @param ids 需要删除的员工提成主键
     * @return 结果
     */
    @Override
    public int deleteHlAdminCommissionByIds(Long[] ids)
    {
        return hlAdminCommissionMapper.deleteHlAdminCommissionByIds(ids);
    }

    /**
     * 删除员工提成信息
     * 
     * @param id 员工提成主键
     * @return 结果
     */
    @Override
    public int deleteHlAdminCommissionById(Long id)
    {
        return hlAdminCommissionMapper.deleteHlAdminCommissionById(id);
    }


//    /**
//     * 服务计算会员提成的默认接口1
//     *
//     * @param hlAdminCommissionDTOS 员工提成主键
//     * @return 结果
//     */
//    public List<HlAdminCommissionDTO> returnCommissionDTO(HlAdminCommissionDTO hlAdminCommissionDTOS)
//    {
//
//        List<HlAdminCommissionDTO> commissionlist = new ArrayList<>();
//        commissionlist.add(hlAdminCommissionDTOS);
//        return commissionlist;
//    }

    /**
     * 服务计算会员提成的默认接口1
     *
     * @param
     * @return 结果
     */
//    public Double returnCommissionDTO(Double cm)
//    {
//
//        return commissionlist;
//    }
//
//

//     服务计算会员提成的默认接口1

    public Double getPostRatio(String updateByName)
    {
//                    通过当前用户的修改者名查到当前用户的信息
        SysUser sysUser = sysUserMapper.selectUserByUserName(updateByName);
        Long userId = sysUser.getUserId();
//                    通过用户ID找到岗位数据
        HlPost hlPost = hlPostMapper.selectHlPostById(userId);
//                    找到用户对应的对应提成值
        return hlPost.getPostRatio();
    }


//     服务计算会员提成的默认接口2

    public Double getPostBaseRatio(Double ratio, Integer memberId, Double memberPrice)
    {

        if(ORDINARY.equals(memberId)){
            return ORDINARY_RATIO;
        }

        if(SILVER.equals(memberId)){
            return memberPrice * ratio;
        }

        if(GOLD.equals(memberId)){
//            缺一个办理会员记录表，相同的用户idCard可以重复，但是新增的时候判断用户是否是该会员，如果是则添加失败，这里循环这个表来查看上次会员是什么级别
//            用户创建的时候不能重复创建且idCard唯一，并且在前端用户列表显示办理按钮 以及 用户会员权限显示
            return memberPrice * ratio;
        }



        return null;
    }


}
